package com.yycx.module.bus.provider.service.hy;

import com.yycx.common.base.entity.EntityMap;
import com.yycx.common.mybatis.base.service.IBaseService;
import com.yycx.common.mybatis.model.ResultBody;
import com.yycx.module.bus.client.entity.BusPayment;
import com.yycx.module.bus.client.entity.hy.HyOrder;
import com.yycx.module.bus.client.entity.hy.HyOrderDetail;
import com.yycx.module.bus.client.enums.HySaleTypeEnum;
import com.yycx.module.bus.client.vo.OrderCustomReturn;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 非两票订单 接口
 *
 * @author flyme
 * @date 2020-07-28
 */
public interface HyOrderDetailService extends IBaseService<HyOrderDetail> {


    /**
     * 更新资保金收款信息
     *
     * @param payment
     * @return
     */
    Boolean updateCustomBond(BusPayment payment);

    /**
     * 拆分订单
     *
     * @param bocr
     * @return
     */
    ResultBody chaiFen(OrderCustomReturn bocr);


    /**
     * 添加票折明细
     *
     * @param orderDetailsId
     * @param saleAmount
     * @return
     */
    ResultBody addDiscountDetails(String orderDetailsId, BigDecimal saleAmount);


    /**
     * 添加票折明细
     *
     * @param orderDetails
     * @param order
     * @param saleAmount
     * @return
     */
    HyOrderDetail addDiscountDetails(HyOrderDetail orderDetails, HyOrder order, BigDecimal saleAmount);


    /**
     * 撤销拆分
     *
     * @param orderDetailsId
     * @return
     */
    ResultBody cancelChaiFen(String orderDetailsId);


    /**
     * 根据订单ID删除订单明细
     *
     * @param orderId
     * @return
     */
    Boolean delByOrderId(Serializable orderId);

    /**
     * 删除订单明细
     *
     * @param orderDetailsId
     * @return
     */
    Boolean deleteById(Serializable orderDetailsId);


    /**
     * 补货申请
     *
     * @param orderDetailsId
     * @param saleType
     * @param saleNum
     * @param saleDate
     * @return
     */
    ResultBody replenishOrder(Long orderDetailsId, String saleType, BigDecimal saleNum, String saleDate);


    /**
     * 订单核算
     *
     * @param params
     * @return
     */
    ResultBody calculate(Map params);

    /**
     * 根据父ID查询
     *
     * @param parentId
     * @param saleType
     * @return
     */
    List<HyOrderDetail> selectByParentId(Long parentId, HySaleTypeEnum saleType);

    /**
     * 查询订单明细
     *
     * @param orderId
     * @return
     */
    List<HyOrderDetail> selectByOrderId(String orderId);


    /**
     * 查询订单明细按金额倒序排列
     *
     * @param orderId
     * @return
     */
    List<HyOrderDetail> selectInsertToReturnList(String orderId);

    /**
     * 查询订单明细
     *
     * @param orderId
     * @return
     */
    List<EntityMap> selectByOrderId(String orderId, HySaleTypeEnum saleType);


    List<EntityMap> selectMapListByOrderId(String orderId);


    /**
     * 查询订单明细
     *
     * @param orderId
     * @return
     */
    List<HyOrderDetail> selectAllFieldByOrderId(String orderId);


    /**
     * 查询订单表单商品明细
     *
     * @param orderId
     * @param hySaleTypeEnum
     * @return
     */
    List<EntityMap> selectOrderDetailsByOrderId(String orderId, HySaleTypeEnum hySaleTypeEnum);


    /**
     * 查询订单明细
     *
     * @param orderId
     * @return
     */
    List<EntityMap> selectMapByOrderId(String orderId);

    /**
     * 查询已用资信额度
     *
     * @param saleManId
     * @return
     */
    BigDecimal totalReputationAmount(Long saleManId);


    /**
     * 统计结算金额
     *
     * @param settleIds
     * @param settleType
     * @return
     */
    EntityMap totalSettleAmount(String settleIds, Integer settleType);

    /**
     * 统计商品金额信息
     *
     * @param settleIds
     * @return
     */
    EntityMap totalDeptSettleInfo(String settleIds);


    /**
     * 统计退保证金信息
     *
     * @param settleIds
     * @return
     */
    EntityMap totalRefundBondInfo(String settleIds);


    /**
     * 计算开票金额
     *
     * @param settleIds
     * @return
     */
    BigDecimal totalSaleAmount(String settleIds);

    /**
     * 关联结算申请ID
     *
     * @param paymentId
     * @param settleIds
     * @return
     */
    Boolean updateDeptSettleApplyId(Long paymentId, String settleIds);


    /**
     * 关联退保金申请ID
     *
     * @param paymentId
     * @param settleIds
     * @return
     */
    Boolean updateRefundBondId(Long paymentId, String settleIds);


    /**
     * 清空结算申请信息
     *
     * @param settleApplyId
     * @return
     */
    Boolean clearDeptSettleApplyId(Serializable settleApplyId);

    /**
     * 清空退保证金申请信息
     *
     * @param refundBondId
     * @return
     */
    Boolean clearRefundBondId(Serializable refundBondId);


    /**
     * 更新部门结算信息
     *
     * @param payment
     * @return
     */
    Boolean updateDeptSettleAmount(BusPayment payment);


    /**
     * 更新退保证金信息
     *
     * @param payment
     * @return
     */
    Boolean updateRefundBond(BusPayment payment);


    /**
     * 统计某个批号商品数量
     *
     * @param orderId
     * @return
     */
    List<EntityMap> totalDrugLotNum(String orderId);


    /**
     * 自定义更新
     *
     * @param hyOrderDetail
     * @return
     */
    Boolean customUpdate(HyOrderDetail hyOrderDetail);

    /**
     * 非两票订单订单统计
     *
     * @param params
     * @return
     */
    ResultBody reportYearHead(Map params);

    /**
     * 非两票订单订单统计
     *
     * @param params
     * @return
     */
    ResultBody reportList(Map params);

    /**
     * 统计资保金已抵扣额度(未回款的)
     *
     * @param saleManId
     * @return
     */
    BigDecimal totalCustomBondAmount(Long saleManId);

    /**
     * 统计资保金已抵扣额度(未回款的)
     *
     * @param saleManId
     * @param companyId
     * @return
     */
    BigDecimal totalCustomBondAmount(Long saleManId, Long companyId);

    /**
     * 统计统计资保金已抵扣额度(排除当前订单)
     *
     * @param saleManId
     * @param companyId
     * @param orderId
     * @return
     */
    BigDecimal totalCustomBondAmount(Long saleManId, Long companyId, String orderId);


    ResultBody reportYearList(Map params);

    ResultBody reportDayHead(Map params);

    ResultBody reportDayList(Map params);

    /**
     * 更新打印次数
     *
     * @param orderId
     * @return
     */
    Boolean updateOutPrintTag(String orderId);


    /**
     * 获取出库单打印信息
     * @param orderId
     * @return
     */
    ResultBody getOutOrderPrint(String orderId,Integer customCount);

    /**
     * 获取标签合并打印信息
     * @param orderId
     * @return
     */
    ResultBody getMergeOutOrderPrint(String orderId);

    ResultBody getOutOrderPrint2(String orderId);



    /**
     * 查询最后一个商品ID
     *
     * @param companyId
     * @param hostName
     * @return
     */
    String selectLastOrderDetailsId(Long companyId, String hostName);


    /**
     * 统计出定数量
     *
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @param orderState
     * @param costPrice
     * @return
     */
    Integer countCdCount(String drugNo, String drugLotNo, String storeCode, Integer orderState,BigDecimal costPrice);


    /**
     * 获取商品名称
     *
     * @param orderId
     * @return
     */
    List<String> getDrugsNames(String orderId);


    /**
     * 查询商品基本信息
     *
     * @param orderDetailsId
     * @return
     */
    EntityMap selectOrderDetailsInfo(String orderDetailsId);


    /**
     * 更新打印件数
     * @param orderDetailsId
     * @param printDrugJs
     * @return
     */
    Boolean updatePrintDrugJs(String orderDetailsId, BigDecimal printDrugJs);

    /**
     * 获取订单商品总件数
     *
     * @param orderId
     * @return
     */
    BigDecimal countDrugJs(String orderId);


    /**
     * 商品明细ID
     * @param orderId
     * @return
     */
    List<String> getOrderDetails(String orderId);
}
